﻿/*
SINACOR - BMF&Bovespa
Arquivo: FaixaPercentualReducaoAcrescimo.cs
Criado em: 14-mai-2010 17:57:07
Arquiteto Responsável: p-dmartinelli
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Servico.Bovespa.Alocacao.BusinessEntity;


namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic.BusinessRuleValidation
{
    public class FaixaPercentualReducaoAcrescimo : BaseBusinessRuleValidation<NegocioAlocadoDireto>, IBusinessRuleValidation
    {
        #region Atributos
        private int _erroObjetoNulo = 314816;
        private int _percentualRedAcrInvalido = 520010;
        #endregion
        #region Propriedades
        public int ErroObjetoNulo
        {
            get { return _erroObjetoNulo; }
            set { _erroObjetoNulo = value; }
        }

        public int PercentualRedAcrInvalido
        {
            get { return _percentualRedAcrInvalido; }
            set { _percentualRedAcrInvalido = value; }
        }
        #endregion
        #region Métodos

        public List<ValidationError> GetErrors()
        {
            return base.ErrorsList;
        }

        public void Validate()
        {
            if (base.EntityToValidate != null)
            {
                Cliente.BusinessEntity.Parameter.FiltroCliente request = new Cliente.BusinessEntity.Parameter.FiltroCliente();
                request.Codigo = EntityToValidate.DadosAlocacao.Cliente;
                Cliente.BusinessLogic.Cliente bl = new Cliente.BusinessLogic.Cliente();
                Cliente.BusinessEntity.Cliente response = bl.ObterCliente(request);

                if (EntityToValidate.DadosAlocacao.Direcionado.PercentualReducaoAcrescimo == null)
                    EntityToValidate.DadosAlocacao.Direcionado.PercentualReducaoAcrescimo = 0;

                if (response.PercentualTotal != 0)
                {
                    if (!(EntityToValidate.DadosAlocacao.Direcionado.PercentualReducaoAcrescimo >= 0))
                        base.AddValidationError(PercentualRedAcrInvalido);
                }
                else
                {
                    if (!(EntityToValidate.DadosAlocacao.Direcionado.PercentualReducaoAcrescimo >= -100))
                        base.AddValidationError(PercentualRedAcrInvalido);
                }
            }
            else
                base.AddValidationError(ErroObjetoNulo);
        }
        #endregion
    }

}